Computer system performance has been studied extensively in the field of computer science. One goal in studying computer system performance is to determine a cost-effective configuration of the computer system that can handle the expected workload. The workload placed on a computer system is the amount of work to be performed by a computer program and is typically specified in terms of resources needed to complete one transaction. For example, the workload may specify that the computer program uses five seconds of central processor time and performs 10 sequential disk reads with an average size of 4096 bytes per transaction. The workload may further specify the amount of RAM needed by the application program. To predict performance of a computer system when executing a computer program with an expected workload, prior techniques have created models of a computer system and then apply the expected workload to the model to predict performance measurements that would occur when the expected workload is placed on the computer system. A performance measurement typically corresponds to performance characteristics of a system resource (e.g., processor utilization).
In current computer processing environments, two factors make determining a cost-effective configuration using such techniques especially difficult. The first factor is the complexity of the interaction between the operating system and the hardware. Because of this complexity, it is difficult to predict the overall performance of the computer system, and thus very difficult to generate an accurate model. For example, although a disk drive may be capable of accessing its disk twenty-five times a second, the processing performed by the file system may place a further limit on the access rate. Moreover, the variety of possible computer system configurations, especially with personal computers, makes it virtually impossible to generate an accurate model that is appropriate for all possible configurations. The second factor is the difficulty in determining what is the expected workload. Traditionally, single application programs typically executed on dedicated hardware, for example, an airline reservation system. With such single application systems, it was relatively straightforward to determine the workload placed on the computer system. Current computing environments are typically client/server-based, and multiple applications may be executing on a single computer system. The execution and interaction of the multiple applications make it difficult to determine the overall workload. Furthermore, it may be difficult to estimate or measure typical patterns of usages of the various application programs.
If, however, an appropriate model could be developed and an accurate workload could be specified, then it may be possible to identify the system resources that are a "bottleneck." A bottleneck is the computer system resource that has the highest utilization during execution of a workload. (Although it is possible to have multiple bottlenecks, that is, resources with the same highest utilization, such occurrences are rare.) For example, if a workload requires 0.25 seconds of CPU time per transaction and 0.5 seconds of disk time per transaction, then the disk is a bottleneck because its 50% utilization is greater than the processor's 25% utilization. In other words, the disk can handle 2 transactions per second and the CPU can handle 4 transactions per second. Thus, if the current CPU was replaced by a CPU that was twice as fast, the computer system still could only handle 2 transactions per second. Conversely, if the current disk drive, the bottleneck, is replaced by a disk drive that is twice as fast, then the computer system could handle 4 transactions per second. Once a particular resource is identified as a bottleneck, a number of remedies exist. These include distributing the load on the resource across additional instances of that resource, installing a faster resource, or redesigning the workload to use another resource. These remedies will resolve the bottleneck by reducing the time spent using the bottleneck resource. Bottlenecks cannot be eliminated, however, only moved. There is always some resource which can be faster to the benefit of the workload's completion time. Thus, the decision to remove a bottleneck is frequently an issue of cost versus benefit.